package com.lanou3g.code0412.Inter;

/**
 * 定义接口与定义类一样
 * 区别是:class 关键字 改为 interface 关键字
 */
public interface USB {
    //   接口与类一样可以写属性 可以写方法
    //   但是不同的是  接口中只能写常量 和 抽象方法


    //  由于接口里只能出现常量
    //  所以定义常量时 可以不写 public static final
    public static final String VOLTAGE = "5v";

    //  接口只能有 public 的抽象方法  不能有普通方法
    //  它也不是类 也没有构造方法
    //  所以 方法的public abstract 可以不写
    public abstract String sendData();

    public abstract void receiveData(String data);
}
/*
*   接口和抽象类的区别:
*   1.1 语法角度:
* 抽象类本质上还是一个类 在使用时 抽象类中可以存在普通方法 和 成员变量
* 而接口是 单独变量 在使用时 只能存在静态常量和 抽象方法
*
    1.2
  接口中所有的方法可以不写abstract 也是抽象方法而抽象类中的抽象方法 必须写abstract关键字
    1.3
  抽象类必须被继承 才能够使用 而接口必须被实现才能被使用 一个类只能继承一个类 但是可以实现多个接口

    2   含义角度:
  当我们使用抽象类的时候 通常想表达一种"is a"的含义 即 当前类和被继承类之间存在着概念上的"父子关系"
  而使用接口的时候 通常像表达一种"like a"的含义 即 只是确定当前类具有某种能力(具有某些方法) 而没有概念上的父子关系

   3    使用角度
  当一个类有确切的父子关系时 我们使用抽象类 否则使用接口(即使不确定是否有确切的父子关系 我们会优先考虑接口 毕竟类只能继承一次);
  如果一个类中有实体方法 那么我们只能使用抽象类

* */